package jianzhi_offer;

import java.util.ArrayList;
import java.util.Stack;

public class Test3 {
    private static ListNode listNode;

    //第三题：给定一个链表的头节点。获取链表后逆序输出（按照数组（链表就是一种数组的数据结构））

    //直接进行链表的反转
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        //     ArrayList<Integer> list = new ArrayList<>();
        //     while (listNode != null) {
        //         list.add(listNode.val);
        //         listNode = listNode.next;
        //     }
        //     Collections.reverse(list);
        //     return list;
        // }

        //考虑到逆序输出。可以用栈的特性来输出（先将元素入栈然后再出战）
        ArrayList<Integer> list = new ArrayList<>();
        Stack<Integer> stack = new Stack<>();
        while(listNode != null) {
            stack.push(listNode.val);
            listNode = listNode.next;
        }
        while(!stack.empty()) {
            list.add(stack.pop());
        }
        return list;
    }

    public static void main(String[] args) {
        Test3 test = new Test3();

        test.printListFromTailToHead(listNode);
    }

    private class ListNode {
        public Integer val;
        public ListNode next;
    }
}

